// void backtracking(参数) {
//     if (终止条件) {
//         存放结果;
//         return;
//     }

//     for (选择：本层集合中元素（树中节点孩子的数量就是集合的大小）) {
//         处理节点;
//         backtracking(路径，选择列表); // 递归
//         回溯，撤销处理结果
//     }
// }

// 给定两个整数 n 和 k，返回范围 [1, n] 中所有可能的 k 个数的组合。
// 1 <= n <= 20
// 1 <= k <= n
/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */
// for (let i = 1; i <= n; i++) {
//     for (let j = i + 1; j <= n; j++) {
//         for (let u = j + 1; u <= n; n++) {
//             cout << i << " " << j << " " << u << endl;
//         }
//     }
// }
var combine = function(n, k) {
    let result = []
    function backtracking(arr,k,start,n){
        if(arr.length===k){
            result.push(arr)
            return
        }
        
        for (let index = start+1; index < n; index++) {
            let list = [...arr]
            list.push(index)
            backtracking([...list],k,index,n)
            
        }

    }
    backtracking([],k,0,n+1)
    return result
};

console.log(combine(1,1));